package Hilos;
import Zombies.Zombie;
import Logica.Juego;
import Logica.Tablero;
import Graficas.Grafica;
import Humanos.Humano;


public class HiloHumano extends Thread{
	//ATRIBUTOS DE INSTANCIA
	protected Humano humano;
	protected Juego juego;
	protected Grafica grafica;
	
	//CONSTRUCTOR
	public HiloHumano(Humano h,Juego j,Grafica g){
		humano=h;juego=j;grafica=g;
		grafica.agregarHumano(humano);
	}
	
	//COMANDOS
	public void run(){
		Zombie enemigo;Tablero t=juego.getTablero();int cont=0;
		while((juego.sigueJuego())&&(humano.estaVivo())){//EL HILO DEBE SEGUIR MIENTRAS NO SE TERMINE EL JUEGO Y EL HUMANO ESTE VIVO
			if(!juego.juegoEnPausa()){
				if(!humano.usoAtaqueEspecial())//SI NO USO EL ATAQUE ESPECIAL, LO HACE
					humano.ataqueEspecial();
				if(humano.getPuedeAtacar()){						
					enemigo=t.primerZombieFila(humano.getFila());
					if((enemigo!=null)&&(enemigo.getColumna()>=humano.getColumna())&&(enemigo.getColumna()<=7)&&(enemigo.getVida()>0)){//CONDICIONES PARA PODER ATACAR AL ZOMBIE
						humano.setPuedeAtacar(false);
						cont=0;
						humano.atacar(enemigo);}}//SE PRODUCE EL ATAQUE
				else{cont++;			
					 if(cont==humano.getVelocidadDisparo()){//PUEDE VOLVER A ATACAR
						 humano.setPuedeAtacar(true);
					 if (humano.estaInfectado())//SE PONE LA IMAGEN DEL PERSONAJE QUIETO, DEPENDE DE SI ESTA INFECTADO O NO
						 humano.mh().setImagen(2);
					 else humano.mh().setImagen(1);}}}
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();}}
		
		if(!humano.estaVivo()){//SI EL HUMANO MURIO, SE DEBE SACAR DEL TABLERO Y DE LA GRAFICA
			t.retirarHumano(humano);
			humano.morir();
			try {
				Thread.sleep(1500);//ES PARA QUE SE VEA EL GIF DE LA MUERTE DEL PERSONAJE
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}			
			grafica.retirarHumano(humano);			
			juego.decrementarPuntaje(humano.getPuntaje());}
	}
}
